package com.net.test.common;


import com.net.test.vo.PageInfoVO;

public class PagingUtil {

	/**
	 * [필수]total_record, [기본10]page_per_record_cnt, [기본10]group_per_page_cnt
	 * @param pageInfoVO
	 * @return record_start_no, record_end_no
	 * @throws Exception
	 */
	public static PageInfoVO PagingCheck(PageInfoVO pageInfoVO)throws Exception{
		
		int pageno = pageInfoVO.getPageno();
		
		if(pageno<1){
			pageno = 1;
		}
		int total_record= pageInfoVO.getTotal_record(); //총 레코드 수
		int page_per_record_cnt = pageInfoVO.getPage_per_record_cnt(); // 페이지당 레코드수
		int group_per_page_cnt = pageInfoVO.getGroup_per_page_cnt(); // 페이지당 보여줄 번호 수
		
		int record_end_no = pageno*page_per_record_cnt;
		int record_start_no = record_end_no-(page_per_record_cnt-1);
		
		if(record_end_no>total_record){
			record_end_no = total_record;
		}
		System.out.println(total_record % page_per_record_cnt);
		int total_page = total_record / page_per_record_cnt + (total_record % page_per_record_cnt>0 ? 1:0);
		
		//추가 total_record 가 0일 때 문제 S
		if(total_page == 0 ){
			total_page = 1;
		}
		//추가 total_record 가 0일 때 문제 E
		
		
		if(pageno>total_page){
			pageno = total_page;
		}
		//현재 페이지(정수)/ 한 페이지당 보여줄 페이지 번호 수(정수) + (그룹 번호는 현제 페이지(정수) % 한 페이지 당 보여줄 페이지 번호 수(정수)>0?1:0)
		
		
		int group_no = pageno/group_per_page_cnt +( pageno%group_per_page_cnt>0 ? 1:0);
		//현재 그룹번호 = 현재페이지/페이지당 보여줄 번호수(현재페이지%페이지당 보여줄 번호 수 > 0 ? 1:0)
		
		int page_eno = group_no*group_per_page_cnt;
		//현재 그룹 끝 번호 = 현재 그룹 번호 * 페이지당 보여줄 번호
		
		int page_sno = page_eno-(group_per_page_cnt-1);
		
		if(page_eno>total_page){
			page_eno = total_page;
		}
		int prev_pageno = page_sno - group_per_page_cnt;
		
		int next_pageno = page_sno + group_per_page_cnt;
		
		if(prev_pageno<1){
			prev_pageno =1;
		}
		if(next_pageno > total_page){
			next_pageno = total_page/group_per_page_cnt * group_per_page_cnt+1;
									
		}
		
		pageInfoVO.setPageno(pageno);                          
		pageInfoVO.setTotal_page(total_page);                  
		pageInfoVO.setTotal_record(total_record);              
		pageInfoVO.setPage_per_record_cnt(page_per_record_cnt);
		pageInfoVO.setGroup_per_page_cnt(group_per_page_cnt);  
		pageInfoVO.setRecord_start_no(record_start_no);        
		pageInfoVO.setRecord_end_no(record_end_no);            
		pageInfoVO.setGroup_no(group_no);                      
		pageInfoVO.setPage_eno(page_eno);                      
		pageInfoVO.setPage_sno(page_sno);                      
		pageInfoVO.setPrev_pageno(prev_pageno);                
		pageInfoVO.setNext_pageno(next_pageno);                
		
		return pageInfoVO;
		
	}
}
